南京大学 操作系统 课程总结 2022
Part 1
资料:The Feynman Lectures on Physics,ENIAC Simulator and Related Material。
思考 Why - What - How,为什么 - 是什么 - 怎么做。
Operating System: A body of software, in fact, that is responsible for making it easy to run programs (even allowing you to seemingly run many at the same time), allowing programs to share memory, enabling programs to interact with devices, and other fun stuff like that. (OSTEP)
关键问题:操作系统如何发展成现在这样的?(硬件、软件)
工具:gdb
,strace
。(tldr
,xxd
)
资料:Vim help files,logisim.c,seven-seg.py,minimal.S。
以下代码是 logisim.c
的简化版,实现数字逻辑电路的模拟器。我们可以在 vim
中使用 !gcc % && ./a.out
命令,运行如下代码。代码中使用 X macro 技巧,我们可以使用 !gcc -E %
命令输出宏展开之后的代码。
1 |
|
1 | int main() { |
程序 seven-seg.py
使用 ANSI escape code 来控制字符的颜色。\033[37m
和 \033[31m
分别表示,将当前和之后的字符设置为白色、红色,而 \033[0m
表示重置设置。\033[2J
表示清空屏幕同时将光标移至左上角,\033[1;1f
表示将光标移至第 1 行和第 1 列(应该是这样,HVP 和 CUP 的区别没看懂)。最后,我们可以使用管道,将 logisim.c
的输出作为 seven-seg.py
的输入,从而模拟数码管的显示(执行 ./a.out | python3 seven-seg.py
命令)。
彩蛋:telnet towel.blinkenlights.nl
(命令行电影),ssh sshtron.zachlatta.com
(网络游戏)。(使用 ANSI escape code 实现)
关键概念:程序是状态机。可以从以下两个视角,抽象的理解。
-
源代码视角:状态 = 栈帧列表(每个栈帧都有 PC)+ 全局变量。
-
二进制视角:状态 = 寄存器 + 内存,程序 = 计算指令 + syscall 指令。
问题:如何构造一个最小的 “Hello, World” 程序?(RTFM,man syscall
)
1 |
|
南京大学 操作系统 课程总结 2022